

package Controlador;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.math.*;
import java.util.Locale;
import java.util.Scanner;
import java.util.Vector;

import javax.swing.JOptionPane;
import javax.swing.ComboBoxModel;
import javax.swing.DefaultComboBoxModel;

import Modelo.Cooperativa;
import Modelo.DiaFeriado;
import Modelo.Socio;
import Modelo.Terminal;
import Modelo.Multa;
import Modelo.TipoUnidad;
import Modelo.Unidad;
import Vista.VMulta;
@SuppressWarnings("all")
public class CMulta implements ActionListener, ItemListener{

	private Terminal ter;
	private Multa mul;
	private Unidad uni;
	private VMulta vmul;
	private Cooperativa co;
	private Socio so;
	

	
	
	public CMulta(Terminal ter, CTerminal controladorterminal){
		super();
		
		
		this.ter = ter;
		this.co = co;
		this.so = so;
		this.mul = new Multa();
		this.vmul = new VMulta(this);
		this.vmul.setVisible(true);

		vmul.getCmbSocio().setVisible(false);
		vmul.getCmbUnidad().setVisible(false);

		
		
		LlenarComboCooperativa();
		

		vmul.getTxtCooperativa().setVisible(false);
		vmul.getTxtSocio().setVisible(false);
		vmul.getTxtUnidad().setVisible(false);

		vmul.getTxtfechafalto().setVisible(false);
		vmul.getTxtChofer().setVisible(false);
		vmul.getLblChofer().setVisible(false);
		
		LlenarComboDiasFeriados();
		vmul.getScpMulta().setVisible(false);
	}
	
	public void actionPerformed(ActionEvent e) {
	      if(e.getActionCommand().toLowerCase().equals("modificar"))
	      {
	    	  		Modificar();
	      }
	      else if(e.getActionCommand().toLowerCase().equals("multar"))
	      {
	    	  		Guardar();
	      }else if(e.getActionCommand().toLowerCase().equals("limpiar"))
	      {
	    	  Limpiar();
	      }else if(e.getActionCommand().toLowerCase().equals("eliminar"))
	      {
	    	  Eliminar();
	      }
	      else if(e.getActionCommand().toLowerCase().equals("buscar")){
	    	  Buscar();
	      }
	      
	}
	
	public void Modificar(){
		
		
		
		
		
		
		
		

	}
	
	public int numeroAleatorio(int numero){
		
		double a = Math.random()*numero;
		int b;
		b=(int)(a);
		return b;
		
	}
	
	public void Guardar(){
		
		if(validarDatos()){
			Multa mul = new Multa();
			mul.setCodigo(vmul.getTxtCodigo().getText());
			mul.setDescripcion(vmul.getTxtDescripcion().getText());
			mul.setFechaEmision(vmul.getTxtfecha().getText());
			mul.setFechafalto(vmul.getCmbFechaFalto().getSelectedItem().toString());
			mul.setUnidad(vmul.getTxtUnidad().getText().toString());
			mul.setCooperativa(vmul.getCmbCooperativa().getSelectedItem().toString());
			mul.setSocio(vmul.getCmbSocio().getSelectedItem().toString());
			mul.setChofer(vmul.getTxtChofer().getText());
			ter.agregarMulta(mul);
			
			JOptionPane.showMessageDialog(null, "Registro de Multa exitoso", "Guardar Multa", 1);
			
			vmul.getTxtCodigo().setText("");
			vmul.getTxtDescripcion().setText("");
			vmul.getTxtfecha().setText("");
			vmul.getTxtfechafalto().setText("");
			//vmul.getCmbUnidad().setVisible(false);
			vmul.getTxtUnidad().setVisible(false);
			vmul.getCmbSocio().setVisible(false);
			
			String placaunidadmultada = vmul.getTxtUnidad().getText();
			
			
			Unidad unidadmultada = ter.buscarCooperativaNombre(vmul.getCmbCooperativa().getSelectedItem().toString()).buscarSocioNombre(vmul.getCmbSocio().getSelectedItem().toString()).buscarUnidad(placaunidadmultada);
			unidadmultada.setEstatus('I');
			
			vmul.getScpMulta().setVisible(false);
			vmul.getCmbCooperativa().removeAllItems();
			
			
			ComboBoxModel cmbCooperativadModel = new DefaultComboBoxModel(new String[]  {"Seleccione una cooperativa"});
			vmul.getCmbCooperativa().setModel(cmbCooperativadModel);
			LlenarComboCooperativa();
			
			ComboBoxModel cmbFechaFaltodModel = new DefaultComboBoxModel(new String[]  {"Seleccione un dia feriado"});
			vmul.getCmbFechaFalto().setModel(cmbFechaFaltodModel);
			LlenarComboDiasFeriados();
			
		}
		
	}
	
	public void Limpiar(){
		//pone los campos de texto en blanco
		vmul.getTxtCodigo().setText("");
		vmul.getTxtDescripcion().setText("");
		vmul.getTxtfecha().setText("");
		vmul.getTxtfechafalto().setText("");
		vmul.getTxtCooperativa().setText("");
		vmul.getTxtSocio().setText("");
		vmul.getTxtfechafalto().setText("");
		vmul.getTxtUnidad().setText("");
		
		//habilita todos los botones
		vmul.getBtnBuscar().setEnabled(true);
		vmul.getBtnEliminar().setEnabled(true);
		vmul.getBtnModificar().setEnabled(true);
		vmul.getBtnGuardar().setEnabled(true);
		
		//habilita todos los campos de texto
		
		vmul.getTxtCodigo().setEnabled(true);
		vmul.getTxtDescripcion().setEnabled(true);
		vmul.getTxtfecha().setEnabled(true);
		vmul.getTxtfechafalto().setEnabled(true);

		
		vmul.getTxtCooperativa().setVisible(false);
		vmul.getTxtSocio().setVisible(false);
		vmul.getTxtUnidad().setVisible(false);
		
		//vmul.getCmbUnidad().setVisible(false);
		vmul.getCmbSocio().setVisible(false);
		vmul.getCmbCooperativa().setVisible(true);
		vmul.getTxtfechafalto().setVisible(false);
		vmul.getCmbFechaFalto().setVisible(true);
		
		vmul.getTxtChofer().setVisible(false);
		vmul.getLblChofer().setVisible(false);
		vmul.getTxtChofer().setText("");
		
		vmul.limpiarTabla();
		vmul.getScpMulta().setVisible(false);
		
		vmul.getCmbCooperativa().removeAllItems();
		ComboBoxModel cmbCooperativadModel = new DefaultComboBoxModel(new String[]  {"Seleccione una cooperativa"});
		vmul.getCmbCooperativa().setModel(cmbCooperativadModel);
		LlenarComboCooperativa();
		
		
		ComboBoxModel cmbFechaFaltodModel = new DefaultComboBoxModel(new String[]  {"Seleccione un dia feriado"});
		vmul.getCmbFechaFalto().setModel(cmbFechaFaltodModel);
		LlenarComboDiasFeriados();
	}
	
	public void Eliminar(){
		
	}
	
	public void Buscar(){
		Multa multa;
		if((vmul.getTxtCodigo().getText().equals(""))){
			vmul.mostrarMensaje("Debe llenar el campo codigo para poder buscar");		
		}else if(vmul.getTxtCodigo().getText().toString() != "")
		{
			String codigo = vmul.getTxtCodigo().getText().toString();
			
			
		
			if( ter.buscarMulta(codigo) == null){
				vmul.mostrarMensajeError("La multa con codigo " + codigo + " no existe" );
			}else
			 {
				Multa multabuscada = ter.buscarMulta(codigo);
				
				
				vmul.getTxtCodigo().setText(multabuscada.getCodigo());
				vmul.getTxtDescripcion().setText(multabuscada.getDescripcion());
				vmul.getTxtfecha().setText(multabuscada.getFechaemision());
				vmul.getTxtfechafalto().setText(multabuscada.getFechafalto());
				
				
				vmul.getCmbCooperativa().setVisible(false);
				vmul.getCmbSocio().setVisible(false);
			
				
				vmul.getTxtCooperativa().setText(multabuscada.getCooperativa());
				vmul.getTxtSocio().setText(multabuscada.getSocio());
		
				vmul.getTxtfechafalto().setText(multabuscada.getFechafalto());
				
				
				
			
				
				vmul.getTxtCooperativa().setVisible(true);
				vmul.getTxtSocio().setVisible(true);
				vmul.getTxtUnidad().setVisible(true);
				vmul.getTxtUnidad().setText(multabuscada.getUnidad());
				
				vmul.getBtnGuardar().setEnabled(false);
				vmul.getBtnBuscar().setEnabled(false);
				
				vmul.getTxtCodigo().setEnabled(false);
				vmul.getTxtDescripcion().setEnabled(false);
				vmul.getTxtfecha().setEnabled(false);
				vmul.getTxtfechafalto().setEnabled(false);
				vmul.getTxtCooperativa().setEnabled(false);
				vmul.getTxtSocio().setEnabled(false);
			
				vmul.getCmbFechaFalto().setVisible(false);
				vmul.getTxtfechafalto().setVisible(true);
			
				vmul.getTxtChofer().setVisible(true);
				vmul.getLblChofer().setVisible(true);
				vmul.getTxtChofer().setEnabled(false);
				vmul.getTxtUnidad().setEnabled(false);
				
				vmul.getTxtChofer().setText(multabuscada.getChofer());

				
				
				
			}
			
			

		}
	}
	
	public boolean validarDatos(){
		
	if(vmul.getTxtCodigo().getText().equalsIgnoreCase("")){
		vmul.mostrarMensaje("Debe ingresar un codigo para la multa");
		return false;
	}else if(vmul.getTxtDescripcion().getText().equalsIgnoreCase("")){
		vmul.mostrarMensaje("Debe ingresar una descripcion para la multa");
		return false;
	}else if(vmul.getTxtfecha().getText().equalsIgnoreCase("")){
		vmul.mostrarMensaje("Debe ingresar una fecha de emision para la multa");
		return false;
	}else if(vmul.getCmbCooperativa().getSelectedItem() == "Seleccione una cooperativa"){
		vmul.mostrarMensaje("Debe seleccionar una cooperativa");
		return false;
	}else if (vmul.getCmbSocio().getSelectedItem() == "Seleccione un socio"){
		vmul.mostrarMensaje("Debe seleccionar un socio");
		return false;
	}
	
	else if (vmul.getTxtUnidad().getText().toString().equals("") ){
		vmul.mostrarMensaje("Debe seleccionar una unidad");
		return false;
		
		
	}else if (ter.buscarMulta(vmul.getTxtCodigo().getText())!=null){
		vmul.mostrarMensaje("Ya esta multa con codigo " + vmul.getTxtCodigo().getText() + " existe");
		return false;
	}else if(vmul.getCmbFechaFalto().getSelectedItem() == "Seleccione un dia feriado"){
		vmul.mostrarMensaje("Debe seleccionar el dia feriado en el no trabajo la unidad");
		return false;
	}
	
		
		return true; //en caso de que esten llenos los campos
		
	}
	
	public void LlenarComboCooperativa(){
		ArrayList<Cooperativa> cooperativas = ter.getCooperativas();
		for (int i = 0; i < cooperativas.size(); i++) {
			vmul.getCmbCooperativa().addItem(cooperativas.get(i).getDescripcion());
			
		} 
		
	}
	
	
	
	public void LlenarComboSocio(Cooperativa co){
		ArrayList<Socio> socios = co.getSocios();
		
		for (int i = 0; i < socios.size(); i++) {
			vmul.getCmbSocio().addItem(socios.get(i).getNombre());
		} 
		

	}
	
	public void LlenarComboUnidad(Socio so){
		ArrayList<Unidad> unidades = so.getUnidades();
		for(int i = 0; i < so.contarUnidades() ; i++){
			
		if(so.getUnidades().get(i).getEstatus() == 'A' ){
				vmul.getCmbUnidad().addItem(unidades.get(i).getPlaca());
		}
		}
	}
	
	public void LlenarComboDiasFeriados(){
		ArrayList<DiaFeriado> diasferiados = ter.getDiasferiados();
		for(int i = 0; i < ter.contarDiasFeriados() ; i++){
			vmul.getCmbFechaFalto().addItem(diasferiados.get(i).getDiaferiado());
		}
	}
	

		
	@SuppressWarnings("static-access")
	@Override
	public void itemStateChanged(ItemEvent e) {
		if (e.getStateChange() == e.SELECTED) {
			if (e.getSource().equals(vmul.getCmbCooperativa())){
				
				

				String cooperativaseleccionada = vmul.getCmbCooperativa().getSelectedItem().toString();
				
				if(cooperativaseleccionada == "Seleccione una cooperativa"){
					
					vmul.getCmbSocio().setVisible(false);
					vmul.getTxtUnidad().setVisible(false);
					vmul.getScpMulta().setVisible(false);
					//vmul.getCmbUnidad().setVisible(false);
					
				} else if(cooperativaseleccionada.toLowerCase().toString().equalsIgnoreCase(cooperativaseleccionada) && (cooperativaseleccionada != "Seleccione una cooperativa")){
					vmul.getCmbSocio().setVisible(true);
					vmul.getCmbSocio().removeAllItems();
					
					ComboBoxModel cmbsociosmodel = new DefaultComboBoxModel(new String[] {"Seleccione un socio"});
					vmul.getCmbSocio().setModel(cmbsociosmodel);
					Cooperativa cooperativabuscada = ter.buscarCooperativaNombre(cooperativaseleccionada);
					
					
					LlenarComboSocio(cooperativabuscada);
					
					
						

						vmul.limpiarTabla();

						for (int k = 0; k < ter.contarMultas() ; k++) {
								
								if(ter.getMultas().get(k).getCooperativa().equals(cooperativabuscada.getDescripcion())){
									
								
									Vector<String> datos = new Vector<String>(2, 1);
									
									
									String codigo = ter.obtenerMulta(k).getCodigo();
									String unidad = ter.obtenerMulta(k).getUnidad();
									datos.add(codigo);
									datos.add(unidad);
									vmul.agregarFilaTblMultas(datos);
								}
								
						}
						
						vmul.getScpMulta().setVisible(true);
					
					/*vmul.getCmbUnidad().removeAllItems();
					
					ComboBoxModel cmbunidadmodel = new DefaultComboBoxModel(new String[] {"Seleccione una unidad"});
					vmul.getCmbUnidad().setModel(cmbunidadmodel);*/
				
					
				}
				
	
		}else if(e.getSource().equals(vmul.getCmbSocio())){
				
				String socioseleccionado = vmul.getCmbSocio().getSelectedItem().toString();
				
				if(socioseleccionado == "Seleccione un socio"){
					
					
					vmul.getTxtUnidad().setVisible(false);
					
					
					/*vmul.getCmbUnidad().setVisible(false);
					vmul.getCmbUnidad().removeAllItems();
					
					ComboBoxModel cmbunidadmodel = new DefaultComboBoxModel(new String[] {"Seleccione una unidad"});
					vmul.getCmbUnidad().setModel(cmbunidadmodel);*/
					
					
				}else if(socioseleccionado.toLowerCase().toString().equalsIgnoreCase(socioseleccionado) && (socioseleccionado != "Seleccione un socio")){
					/*vmul.getCmbUnidad().setVisible(true);
					vmul.getCmbUnidad().removeAllItems();
					
					ComboBoxModel cmbunidadmodel = new DefaultComboBoxModel(new String[] {"Seleccione una unidad"});
					vmul.getCmbUnidad().setModel(cmbunidadmodel);
					
					
					
					LlenarComboUnidad(sociobuscado);
					*/
					
					
					String cooperativaseleccionada = vmul.getCmbCooperativa().getSelectedItem().toString();
					Cooperativa cooperativabuscada = ter.buscarCooperativaNombre(cooperativaseleccionada);
					
					Socio sociobuscado = cooperativabuscada.buscarSocioNombre(socioseleccionado);
					
					
					vmul.getTxtUnidad().setVisible(true);
					vmul.getTxtUnidad().setEnabled(false);
					
				
					
					int numerounidades = sociobuscado.contarUnidades();
					
					int aleatorio = numeroAleatorio(numerounidades);
					
					if(sociobuscado.contarUnidades()!= 0){
						Unidad uni = sociobuscado.getUnidades().get(aleatorio);
						
						vmul.getTxtUnidad().setText(uni.getPlaca());
						vmul.getTxtChofer().setText(cooperativabuscada.buscarEmpleado(uni.getChofer()).getNombre());
						
						
					}else
					{
						vmul.getTxtUnidad().setText("");
					}
					
					
					
				}
				
				
				
				
			}
			
			
		}
	}
	
	
}
